//package com.lagou.edu.common;
//
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.security.config.annotation.web.builders.HttpSecurity;
//import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
//import org.springframework.security.config.http.SessionCreationPolicy;
//import org.springframework.security.jwt.crypto.sign.MacSigner;
//import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
//import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
//import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
//import org.springframework.security.oauth2.provider.token.TokenStore;
//import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
//import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
//
///**
// * @ClassName ResourceServerConfiger
// * @Description TODO
// * @Auth ying.xiao
// * @Date 2021/4/23
// * @Version 1.0.0
// */
//@Configuration
//@EnableResourceServer // 开启资源服务器功能
//@EnableWebSecurity // 开启web访问安全
//public class ResourceServerConfiger extends ResourceServerConfigurerAdapter {
//    private String sign_key = "lagou123"; // jwt签名密钥
//
//    @Autowired
//    private MyAccessConverter myAccessConverter;
//    /**
//     * 该⽅法⽤于定义资源服务器向远程认证服务器发起请求，进⾏token校验
//     等事宜
//     * @param resources
//     * @throws Exception
//     */
//    @Override
//    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
//
////        // 设置当前资源服务的资源id
////        resources.resourceId("autodeliver");
////        // 定义token服务对象（token校验就应该靠token服务对象）
////        RemoteTokenServices remoteTokenServices = new
////                RemoteTokenServices();
////        // 校验端点/接⼝设置
////
////        remoteTokenServices.setCheckTokenEndpointUrl("http://localhost:9999/oauth/check_token");
////        // 携带客户端id和客户端安全码
////        remoteTokenServices.setClientId("client_lagou");
////        remoteTokenServices.setClientSecret("abcxyz");
////        // 别忘了这⼀步
////        resources.tokenServices(remoteTokenServices);
//
//        //采用jwt令牌
//        resources.resourceId("autodeliver");
//        resources.tokenStore(tokenStore()).stateless(true);
//
//    }
//    /**
//     * 场景：⼀个服务中可能有很多资源（API接⼝）
//     * 某⼀些API接⼝，需要先认证，才能访问
//     * 某⼀些API接⼝，压根就不需要认证，本来就是对外开放的接⼝
//     * 我们就需要对不同特点的接⼝区分对待（在当前configure⽅法中
//     完成），设置是否需要经过认证
//     *
//     * @param http
//     * @throws Exception
//     */
//    @Override
//    public void configure(HttpSecurity http) throws Exception {
//           http // 设置session的创建策略（根据需要创建即可）
//                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
//                .and()
//                .authorizeRequests()
//                .antMatchers("/user/**").authenticated() //autodeliver为前缀的请求需要认证
//                .antMatchers("/demo/**").authenticated() //demo为前缀的请求需要认证
//                .anyRequest().permitAll(); // 其他请求不认证
//    }
//
//    /*
//该⽅法⽤于创建tokenStore对象（令牌存储对象）
//token以什么形式存储
//*/
//    public TokenStore tokenStore(){
////        return new InMemoryTokenStore();
//
//        //使用jwt令牌
//        return new JwtTokenStore(jwtAccessTokenConverter());
//    }
//
//    public JwtAccessTokenConverter jwtAccessTokenConverter(){
//        JwtAccessTokenConverter jwtAccessTokenConverter = new JwtAccessTokenConverter();
//        jwtAccessTokenConverter.setSigningKey(sign_key); //创建token使用签名key
//        jwtAccessTokenConverter.setVerifier(new MacSigner(sign_key)); //验证jwt参数密钥，使用对称加密
//
//        //设置扩展信息接收
//        jwtAccessTokenConverter.setAccessTokenConverter(myAccessConverter);
//        return jwtAccessTokenConverter;
//    }
//}
